/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.gnp.dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import mx.gnp.entity.Producto;
import mx.gnp.ws1.WSService;
/**
 *
 * @author Matersys 86
 */
public class ProductoDAO extends MySQLDAO {
    private static final String CREATE_PRODUCTO_ITEM = "INSERT INTO PRODUCTO (idproducto,descripcion, precioCompra, precioVenta, idTipoProducto) VALUES (?, ?, ?, ?, ?)";
    private static final String GET_PRODUCTO_ITEMS = "SELECT * FROM PRODUCTO";
    public static void main(String[] args) throws SQLException {
        ProductoDAO dao = new ProductoDAO();
//        Producto p = new Producto(3, "alguna ", 20.0,21.4, 1);
        //       dao.addProducto(p);
        try {
            dao.actualizaProducto(1, 100);
        } catch (SQLException ex) {
            Logger.getLogger(ProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void addProducto(Producto item) throws SQLException {
        try {
            getConnection();
            ps = con.prepareStatement(CREATE_PRODUCTO_ITEM);
            ps.setInt(1, item.getIdProducto());
            ps.setString(2, item.getDescripcion());
            ps.setDouble(3, item.getPrecioCompra());
            ps.setDouble(4, item.getPrecioVenta());
            ps.setInt(5, item.getIdTipoProducto());
            ps.executeUpdate();
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            closeConnection();
        }
    }
    public void realizaVenta(Producto producto) {
        int cantidad = producto.getCantidad();
        try {
            producto = getProducto(producto.getIdProducto());
            if (producto.getCantidad() <= cantidad) {
                WSService service = new WSService();
                cantidad = service.solicitaProducto(new Integer(producto.getIdProducto()).toString());
                actualizaProducto(producto.getIdProducto(), cantidad);
            } else {
                actualizaProducto(producto.getIdProducto(), producto.getCantidad() - cantidad);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public Producto getProducto(int id) throws SQLException {

        Producto producto = null;
        try {
            String query = "SELECT * FROM PRODUCTO where idproducto=" + id;
            getConnection();
            ps = con.prepareStatement(query);
            rs = ps.executeQuery();
            while (rs.next()) {
                producto = new Producto(
                        rs.getInt("idProducto"),
                        rs.getString("descripcion"),
                        rs.getDouble("preciocompra"),
                        rs.getDouble("precioventa"),
                        rs.getInt("idTipoProducto"),
                        rs.getInt("cantidad"));
            }
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            closeConnection();
        }
        return producto;
    }
    public List<Producto> getProductos() throws SQLException {
        List<Producto> productoList = new ArrayList<Producto>();
        try {
            getConnection();
            ps = con.prepareStatement(GET_PRODUCTO_ITEMS);
            rs = ps.executeQuery();
            while (rs.next()) {
                Producto item = new Producto(
                        rs.getInt("idproducto"),
                        rs.getString("descripcion"),
                        rs.getDouble("precioCompra"),
                        rs.getDouble("precioVenta"),
                        rs.getInt("idTipoProducto"),
                        rs.getInt("cantidad"));
                System.out.println(item.getDescripcion());
                productoList.add(item);
            }
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            closeConnection();
        }
        return productoList;
    }
    public void actualizaProducto(int id, int cantidad) throws SQLException {
        try {
            String query = "UPDATE PRODUCTO set cantidad=" + cantidad
                    + " where idproducto=" + id;
            getConnection();
            ps = con.prepareStatement(query);
            ps.executeUpdate();
            //con.commit();
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            closeConnection();
        }
    }
}